const jwt = require('jsonwebtoken');

// 保护路由中间件
const protect = (req, res, next) => {
  try {
    let token;

    // 检查请求头中是否有token
    if (
      req.headers.authorization &&
      req.headers.authorization.startsWith('Bearer')
    ) {
      // 从Bearer token中提取token
      token = req.headers.authorization.split(' ')[1];
    }

    // 如果没有token
    if (!token) {
      return res.status(401).json({
        status: 'error',
        message: '未授权，没有提供token'
      });
    }

    // 验证token
    const decoded = jwt.verify(token, process.env.JWT_SECRET);

    // 将用户ID添加到请求对象中
    req.user = { id: decoded.id };
    next();
  } catch (error) {
    return res.status(401).json({
      status: 'error',
      message: '未授权，token无效'
    });
  }
};

// 管理员权限中间件
const admin = (req, res, next) => {
  // 注意：这里我们模拟管理员检查，实际项目中应该从数据库中获取用户角色
  if (req.user && req.user.isAdmin) {
    next();
  } else {
    res.status(403).json({
      status: 'error',
      message: '未授权，需要管理员权限'
    });
  }
};

module.exports = { protect, admin };